﻿package net.molchat.android.core;


// ======================================= Для перевода величин из байт-массивов
public class FromBytes {

//=================================================================== Переменные
private byte[] src; // Исходный байт-массив
public int pt; // Указатель чтения/записи


//================================================================ Инициализация
// Для десериализации
public FromBytes(byte[] source, int beginNum) {

	src = source;
	pt = beginNum;
}


//============================================ Прочитать байт-массив фикс. длины
/*
 * public byte[] readBytes(int length) { byte[] bytes = new byte[length];
 * in.read(bytes); readLen += bytes.length; return bytes; }/
 */


//============================================================= Прочитать булево
public boolean readBool() {

	if (src[pt++] == 0) {
		return false;
	} else {
		return true;
	}
}


//================================================== Прочитать беззнаковое целое
public int readInt() {

	int byt; // Прочитанный байт
	int ret = 0; // Возвращаемая величина
	int offset = 0; // Смещение


	do {
		byt = src[pt++];
		ret += (byt & 0x7f) << offset;
		offset += 7;
	} while ((byt & Mat.BIT7) != 0);

	return ret;
}


//=================================================== Прочитать беззнаковый байт
public int readUnsByte() {

	return src[pt++];
}


//============================================================= Прочитать строку
public String readString() {

	int len = readInt();
	if (len > 0) {
		pt += len;
		return Mat.iso2utf(src, pt - len, len);
	} else {
		return null;
	}
}


//==================================================== Прочитать строку до конца
public String readStrEnd() {

	if (pt < src.length) {
		return Mat.iso2utf(src, pt, src.length - pt);
	} else {
		return null;
	}
}


}
